package com.AllenDuke.tx;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;

//模拟事务管理器
@Configuration
@Aspect
@EnableAspectJAutoProxy // 开启了Spring对AspectJ的支持
public class TransactionManger {

	// 配置切入点,该方法无方法体,主要为方便同类中其他方法使用此处配置的切入点
	@Pointcut("execution(* com.AllenDuke.service.*Service.*(..))")
	public void txPoint() {
		// 并不执行
		System.out.println("123");
	}

	/*
	 * 配置前置通知,使用在方法aspect()上注册的切入点 同时接受JoinPoint切入点对象,可以没有该参数
	 */
	@Before("txPoint()")
	//public void begin(JoinPoint joinPoint)
	public void begin( ) {
		//System.out.println(joinPoint.getTarget());
		System.out.println("开始事务");
	}

	@AfterReturning("txPoint()")
	public void commit() {
		System.out.println("提交事务");
	}

	@AfterThrowing("txPoint()")
	public void rollback() {
		System.out.println("回滚事务");
	}

}
